{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/bill/anaconda3/lib/python3.7/site-packages/statsmodels/tools/_testing.py:19: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.\n",
      "  import pandas.util.testing as tm\n"
     ]
    }
   ],
   "source": [
    "from pmlb import fetch_data, nearest_datasets\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "import pandas as pd\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "potential dimensions: ['n_instances', 'n_features', 'n_binary_features', 'n_categorical_features', 'n_continuous_features', 'endpoint_type', 'n_classes', 'imbalance', 'task']\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>n_instances</th>\n",
       "      <th>n_features</th>\n",
       "      <th>n_binary_features</th>\n",
       "      <th>n_categorical_features</th>\n",
       "      <th>n_continuous_features</th>\n",
       "      <th>n_classes</th>\n",
       "      <th>imbalance</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>488</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>9.0</td>\n",
       "      <td>0.099363</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1000</td>\n",
       "      <td>10</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.108291</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1000</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0.111245</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1000</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>9.0</td>\n",
       "      <td>0.031251</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>47</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>13</td>\n",
       "      <td>42.0</td>\n",
       "      <td>0.002970</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>279</th>\n",
       "      <td>1599</td>\n",
       "      <td>11</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>11</td>\n",
       "      <td>6.0</td>\n",
       "      <td>0.228804</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>280</th>\n",
       "      <td>4898</td>\n",
       "      <td>11</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>11</td>\n",
       "      <td>7.0</td>\n",
       "      <td>0.211974</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>281</th>\n",
       "      <td>178</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>11</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.012530</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>282</th>\n",
       "      <td>973</td>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.114332</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>283</th>\n",
       "      <td>1479</td>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>9.0</td>\n",
       "      <td>0.127818</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>284 rows × 7 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     n_instances  n_features  n_binary_features  n_categorical_features  \\\n",
       "0            488           4                  0                       0   \n",
       "1           1000          10                  0                       0   \n",
       "2           1000           4                  0                       0   \n",
       "3           1000           4                  0                       0   \n",
       "4             47          13                  0                       0   \n",
       "..           ...         ...                ...                     ...   \n",
       "279         1599          11                  0                       0   \n",
       "280         4898          11                  0                       0   \n",
       "281          178          13                  0                       2   \n",
       "282          973           9                  9                       0   \n",
       "283         1479           8                  0                       0   \n",
       "\n",
       "     n_continuous_features  n_classes  imbalance  \n",
       "0                        4        9.0   0.099363  \n",
       "1                       10        4.0   0.108291  \n",
       "2                        4        5.0   0.111245  \n",
       "3                        4        9.0   0.031251  \n",
       "4                       13       42.0   0.002970  \n",
       "..                     ...        ...        ...  \n",
       "279                     11        6.0   0.228804  \n",
       "280                     11        7.0   0.211974  \n",
       "281                     11        3.0   0.012530  \n",
       "282                      0        2.0   0.114332  \n",
       "283                      8        9.0   0.127818  \n",
       "\n",
       "[284 rows x 7 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pmlb_stats= pd.read_csv('../pmlb/all_summary_stats.tsv', sep='\\t')\n",
    "print('potential dimensions:',[c for c in pmlb_stats.columns if c != 'dataset'])\n",
    "pmlb_stats = pmlb_stats.apply(lambda x: pd.to_numeric(x,errors='coerce')).dropna(axis=1,how='all')\n",
    "\n",
    "pmlb_stats"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "generating summary stats for dataset\n",
      "closest names: ['appendicitis' 'cloud' 'prnn_crabs' 'cleveland_nominal' 'ecoli'\n",
      " 'penguins' 'analcatdata_creditscore' 'postoperative_patient_data' 'mux6'\n",
      " 'corral' 'analcatdata_bankruptcy' 'biomed' 'cars' 'monk3' 'monk1' 'monk2'\n",
      " 'pima' 'diabetes' 'yeast' 'tae']\n"
     ]
    }
   ],
   "source": [
    "dataset = 'appendicitis'\n",
    "dimensions = ['n_instances','n_features'] # these are the default dimensions\n",
    "df = fetch_data(dataset)\n",
    "closest_names = nearest_datasets(df, n = 20, dimensions=dimensions, task='classification')\n",
    "\n",
    "print('closest names:',closest_names)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "106 8\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmgAAAJNCAYAAACFjonMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdeXycZb3///dnZpJM9qRputBQ2kJBSimlhEJFFilL4YAKR2RRQVwKCqIexO18v0fkp19EOUdROaeCrAq0sglHQERUkKVACl1poaWmO22aNmmzz2Su3x8zDUk6aZs2k/tK8no+Hnnkvq/7uu/5XEk6fc+9mnNOAAAA8Eco6AIAAADQFQENAADAMwQ0AAAAzxDQAAAAPENAAwAA8Ewk6AL60vDhw924ceOCLgPAIBBPOK3YtEOjS3K1raFNLfH2LsvHleWrMDqo3kIB9LMFCxZsdc6Vp1s2qN5dxo0bp6qqqqDLADAI7GyJ6duPLlHIpAnl+frF86s6luVEQnrhho9qVHE0wAoBDHRmtqanZRziBIA0CqNZ+sHHjlJRNKLjxw3Tl089VGNKcjVtbIkeuXqGhuVnBV0igEHMBtONaisrKx170AD0pea2uHa2xBXNCqs13q5wyDQsPyfosgAMAma2wDlXmW7ZoDrECQB9LTc7otzsXW+V7DUD0D8IaAAAoItYLKb169erpaUl6FIGhWg0qoqKCmVl7fuHPAIaAADoYv369SosLNS4ceNkZkGXM6A551RbW6v169dr/Pjx+7weFwkAAIAuWlpaVFZWRjjrA2amsrKyXu+NJKABAIDdEM76zv78LAloAAAAniGgAQCAAW/OnDm6//7799jn3nvv1bXXXpt2WUFBQSbK2m8ZvUjAzO6WdJ6kLc65yam2eZKOSHUpkVTnnJuaZt1qSTsltUuK93SfEAAAgKuvvjqw147H44pE+jZSZXoP2r2SZnVucM5d7Jybmgplj0p6bA/rfzTVl3AGAMAQUl1drSOPPFJf+tKXdNRRR+mss85Sc3Oz3nvvPc2aNUvHHXecTj75ZK1YsUKSdOONN+rWW2+VJL3xxhuaMmWKZsyYoRtuuEGTJ0/u2O7GjRs1a9YsTZw4Ud/61re6vOb111+vadOmaebMmaqpqZEkLVy4UCeeeKKmTJmiCy64QNu3b5cknXbaafre976nU089VbfddpsefvhhTZ48Wcccc4xOOeWUAx5/RgOac+5FSdvSLbPkGXOfkvRQJmsAAAAD08qVK3XNNddo2bJlKikp0aOPPqrZs2frl7/8pRYsWKBbb71VX/nKV3Zb78orr9ScOXP06quvKhwOd1m2cOFCzZs3T0uWLNG8efO0bt06SVJjY6OmTZumN998U6eeeqp+8IMfSJIuv/xy3XLLLVq8eLGOPvrojnZJqqur0wsvvKDrr79eN910k5599lktWrRITz755AGPPchz0E6WtNk5t7KH5U7Sn81sgZnN7mkjZjbbzKrMrGpX2gUAAAPf+PHjNXVq8iyo4447TtXV1XrllVd00UUXaerUqbrqqqu0adOmLuvU1dVp586d+vCHPyxJuuyyy7osnzlzpoqLixWNRjVp0iStWZN8XnkoFNLFF18sSfrMZz6jl156SfX19aqrq9Opp54qSbriiiv04osvdmxrV39JOumkk/S5z31Od955p9rb2w947EHeqPZS7Xnv2UnOuY1mNkLSc2a2IrVHrgvn3B2S7pCSz+LMTKkAAKC/5eR88NzbcDiszZs3q6SkRAsXLuxxnb09Y7z7NuPxeNp++3JrjPz8/I7pOXPm6LXXXtNTTz2lqVOnauHChSorK9vrNnoSyB40M4tIulDSvJ76OOc2pr5vkfS4pOn9Ux0AAPBRUVGRxo8fr4cfflhSMowtWrSoS5/S0lIVFhZq/vz5kqS5c+fu07YTiYQeeeQRSdKDDz6oj3zkIyouLlZpaan+8Y9/SJJ++9vfduxN6+69997TCSecoJtuuknDhw/vOHS6v4Lag3aGpBXOufXpFppZvqSQc25navosSTf1Z4EAAMA/DzzwgL785S/rhz/8oWKxmC655BIdc8wxXfrcdddd+tKXvqT8/HyddtppKi4u3ut28/PztWzZMh133HEqLi7WvHnJfUj33Xefrr76ajU1NWnChAm655570q5/ww03aOXKlXLOaebMmbvV1Fu2t12BB7Rxs4cknSZpuKTNkr7vnLvLzO6VNN85N6dT34Mk/cY5d66ZTVByr5mUDJEPOud+tLfXq6ysdFVVVX08CgAAhpbly5fryCOPDLqM/dbQ0NBxX7Mf//jH2rRpk2677bZAa0r3MzWzBT3dqSKje9Ccc5f20P65NG0bJZ2bml4t6cCiJwAAGJKe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\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "pmlb_stats= pd.read_csv('../pmlb/all_summary_stats.tsv',sep='\\t')\n",
    "pmlb_stats = pmlb_stats.loc[pmlb_stats.task == 'classification']\n",
    "pmlb_stats['neighbors'] = pmlb_stats['dataset'].isin(closest_names)\n",
    "plt.figure(figsize=(10,10))\n",
    "sns.scatterplot(data = pmlb_stats,\n",
    "               x = 'n_instances',\n",
    "               y = 'n_features',\n",
    "               style='neighbors',\n",
    "               hue='neighbors')\n",
    "x0 = df.shape[0]\n",
    "y0 = df.shape[1]\n",
    "print(x0,y0)\n",
    "x_offset=pmlb_stats['n_instances'].std()\n",
    "y_offset0=pmlb_stats['n_features'].std()\n",
    "plt.plot(x0,y0,'rs')\n",
    "# plt.text(x0,y0,dataset)\n",
    "plt.xlim(x0-x_offset,x0+x_offset)\n",
    "plt.ylim(y0-y_offset,y0+y_offset)\n",
    "# plt.xscale('log')\n",
    "# plt.yscale('log')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
